﻿using System;
using VO;

namespace DAL
{
    public class SorteioDAL
    {
        private const string prioridadeInicial = "VINCULADO";

        #region Sorteia
        /// <summary>
        /// Sorteia um cliente para o atendente
        /// </summary>
        /// <param name="idAtendente"></param>
        /// <param name="idCampanha"></param>
        /// <returns></returns>
        public Fila Sorteia(int idAtendente, int idCampanha)
        {
            var idCliente = 0;
            var obj = new Fila();
            var fila = new FilaDAL();

            //verificamos se existe cliente vinculado a um atendente

            obj.idCampanha = idCampanha;
            obj.idAtendente = idAtendente;

            var objFila = fila.SelectFilaOperador(obj);
            if (objFila != null)
            {
                var retorno = fila.SelectFilaOperador(obj)[0];
                idCliente = retorno.idCliente;
                obj.dtInicioAtendimento = retorno.dtInicioAtendimento;
                obj.idCampanha = retorno.idCampanha;
                obj.idFila = retorno.idFila;
                obj.TipoSorteio = COMMON.Enumerator.TipoSorteio.Vinculado;
            }

            if (idCliente == 0)
            {
                var objAgenda = new ClienteAgendamento
                {
                    idAtendente = idAtendente,
                    IdCampanha = idCampanha

                };
                var objresultAgenda = new ClienteAgendamentoDAL();
                var resultaAgenda = objresultAgenda.SelectClienteAgendadoNaFila(objAgenda);
                if (resultaAgenda != null)
                {
                    idCliente = resultaAgenda[0].IdCliente;
                    var objPrioridade = new PrioridadeFilaDAL().Select(prioridadeInicial);
                    var idPrioridade = 0;
                    if (objPrioridade != null)
                    {
                        idPrioridade = objPrioridade[0].idPrioridadeFila;
                    }

                    //recupera idStatusAtendimento inicial
                    var objStatus = new StatusAtendimentoDAL().Select(prioridadeInicial);
                    var idStatus = 0;
                    if (objStatus != null)
                    {
                        idStatus = objStatus[0].idStatus;
                    }
                    obj.idStatus = idStatus;
                    obj.idPrioridadeFila = idPrioridade;
                    obj.TipoSorteio = COMMON.Enumerator.TipoSorteio.Agendado;
                    obj.idCliente = idCliente;
                    obj.idCampanha = resultaAgenda[0].IdCampanha;
                    obj.dtInicioAtendimento = DateTime.Now;
                    obj.idFila = fila.InsereFila(obj);


                    if (idCliente > 0)
                    {
                        //insere o historico do sorteio
                        var objH = new HistoricoSorteio();
                        var historicoSorteio = new HistoricoSorteioDAL();
                        objH.idCliente = idCliente;
                        objH.idAtendente = idAtendente;
                        objH.idCampanha = idCampanha;
                        objH.dtSorteio = DateTime.Now;

                        historicoSorteio.InsereHistoricoSorteio(objH);

                        //deleta agendamento
                        var rsAgenda = new ClienteAgendamento { IdAgendamento = resultaAgenda[0].IdAgendamento };
                        objresultAgenda.DeletaAgendamento(rsAgenda);

                    }

                }

            }



            if (idCliente == 0)
            {
                var objAgenda = new ClienteAgendamento
                {
                    idAtendente = idAtendente,
                    IdCampanha = idCampanha

                };
                var objresultAgenda = new ClienteAgendamentoDAL();
                var resultaAgenda = objresultAgenda.SelectClienteAgendadoSemFila(objAgenda);
                if (resultaAgenda != null)
                {
                    idCliente = resultaAgenda[0].IdCliente;
                    //insere cliente sorteado na tbCCFila
                    //var cliente = new ClienteDAL();
                    //recupera idPrioridadeFila inicial
                    var objPrioridade = new PrioridadeFilaDAL().Select(prioridadeInicial);
                    int idPrioridade = 0;
                    if (objPrioridade != null)
                    {
                        idPrioridade = objPrioridade[0].idPrioridadeFila;
                    }

                    //recupera idStatusAtendimento inicial
                    var objStatus = new StatusAtendimentoDAL().Select(prioridadeInicial);
                    var idStatus = 0;
                    if (objStatus != null)
                    {
                        idStatus = objStatus[0].idStatus;
                    }
                    obj.idStatus = idStatus;
                    obj.idPrioridadeFila = idPrioridade;
                    obj.TipoSorteio = COMMON.Enumerator.TipoSorteio.Agendado;
                    obj.idCliente = idCliente;
                    obj.idCampanha = resultaAgenda[0].IdCampanha;
                    obj.dtInicioAtendimento = DateTime.Now;
                    obj.idFila = fila.InsereFila(obj);


                    if (idCliente > 0)
                    {
                        //insere o historico do sorteio
                        var objH = new HistoricoSorteio();
                        var historicoSorteio = new HistoricoSorteioDAL();
                        objH.idCliente = idCliente;
                        objH.idAtendente = idAtendente;
                        objH.idCampanha = idCampanha;
                        objH.dtSorteio = DateTime.Now;

                        historicoSorteio.InsereHistoricoSorteio(objH);

                        //deleta agendamento
                        var rsAgenda = new ClienteAgendamento { IdAgendamento = resultaAgenda[0].IdAgendamento };
                        objresultAgenda.DeletaAgendamento(rsAgenda);

                    }
                }
            }

            if (idCliente == 0)
            {
                //verificamos se existe cliente agendados para o operador
                var objCliente = fila.SelectFilaCampanhaOperador(obj);
                if (objCliente != null)
                {
                    var retorno = fila.SelectFilaCampanhaOperador(obj)[0];
                    idCliente = retorno.idCliente;
                    obj.idCampanha = retorno.idCampanha;
                    obj.idFila = retorno.idFila;
                    obj.TipoSorteio = COMMON.Enumerator.TipoSorteio.Agendado;
                }
            }

            if (idCliente == 0)
            {
                var cliente = new ClienteDAL();
                //recupera idPrioridadeFila inicial
                var objPrioridade = new PrioridadeFilaDAL().Select(prioridadeInicial);
                int idPrioridade = 0;
                if (objPrioridade != null)
                {
                    idPrioridade = objPrioridade[0].idPrioridadeFila;
                }

                //recupera idStatusAtendimento inicial
                var objStatus = new StatusAtendimentoDAL().Select(prioridadeInicial);
                var idStatus = 0;
                if (objStatus != null)
                {
                    idStatus = objStatus[0].idStatus;
                }

                //sorteia um cliente na tbCCCliente
                var objCliente = new Cliente
                                     {
                                         idCampanha = idCampanha,
                                         idAtendente = idAtendente
                                     };
                var objSorteio = cliente.SelectClienteSorteio(objCliente);
                if (objSorteio != null)
                {
                    obj.idCliente = objSorteio.idCliente;
                    obj.idCampanha = objSorteio.idCampanha;
                    obj.dtInicioAtendimento = DateTime.Now;
                    obj.idPrioridadeFila = idPrioridade;
                    obj.idStatus = idStatus;

                    //insere cliente sorteado na tbCCFila
                    obj.idFila = fila.InsereFila(obj);
                    obj.TipoSorteio = COMMON.Enumerator.TipoSorteio.Sorteado;
                    idCliente = obj.idCliente;
                    idCampanha = objSorteio.idCampanha;

                    if (idCliente > 0)
                    {
                        //insere o historico do sorteio
                        var objH = new HistoricoSorteio();
                        var historicoSorteio = new HistoricoSorteioDAL();
                        objH.idCliente = idCliente;
                        objH.idAtendente = idAtendente;
                        objH.idCampanha = idCampanha;
                        objH.dtSorteio = DateTime.Now;

                        historicoSorteio.InsereHistoricoSorteio(objH);
                    }
                }
            }

            obj.idCliente = idCliente;

            return obj;
        }
        #endregion
        #region AtendeClienteConsulta
        public Fila AtendeClienteConsulta(int idAtendente, int idCampanha, int idCliente)
        {
            //recupera idPrioridadeFila inicial
            var objPrioridade = new PrioridadeFilaDAL().Select(prioridadeInicial);
            int idPrioridade = 0;
            if (objPrioridade != null)
            {
                idPrioridade = objPrioridade[0].idPrioridadeFila;
            }

            //recupera idStatusAtendimento inicial
            var objStatus = new StatusAtendimentoDAL().Select(prioridadeInicial);
            int idStatus = 0;
            if (objStatus != null)
            {
                idStatus = objStatus[0].idStatus;
            }

            var obj = new Fila
                          {
                              idCampanha = idCampanha,
                              idAtendente = idAtendente,
                              idCliente = idCliente,
                              dtInicioAtendimento = DateTime.Now,
                              idPrioridadeFila = idPrioridade,
                              idStatus = idStatus
                          };
            //insere cliente sorteado na tbCCFila
            var fila = new FilaDAL();
            obj.idFila = fila.InsereFila(obj);

            return obj;
        }
        #endregion

    }
}